//>>built
define("dojox/xmpp/ChatService", ["dijit", "dojo", "dojox"], function (_1, _2, _3) {
    _2.provide("dojox.xmpp.ChatService");
    _3.xmpp.chat = {CHAT_STATE_NS:"http://jabber.org/protocol/chatstates", ACTIVE_STATE:"active", COMPOSING_STATE:"composing", INACTIVE_STATE:"inactive", PAUSED_STATE:"paused", GONE_STATE:"gone"};
    _2.declare("dojox.xmpp.ChatService", null, {state:"", constructor:function () {
        this.state = "";
        this.chatid = Math.round(Math.random() * 1000000000000000);
    }, recieveMessage:function (_4, _5) {
        if (_4 && !_5) {
            this.onNewMessage(_4);
        }
    }, setSession:function (_6) {
        this.session = _6;
    }, setState:function (_7) {
        if (this.state != _7) {
            this.state = _7;
        }
    }, invite:function (_8) {
        if (this.uid) {
            return;
        }
        if (!_8 || _8 == "") {
            throw new Error("ChatService::invite() contact is NULL");
        }
        this.uid = _8;
        var _9 = {xmlns:"jabber:client", to:this.uid, from:this.session.jid + "/" + this.session.resource, type:"chat"};
        var _a = new _3.string.Builder(_3.xmpp.util.createElement("message", _9, false));
        _a.append(_3.xmpp.util.createElement("thread", {}, false));
        _a.append(this.chatid);
        _a.append("</thread>");
        _a.append(_3.xmpp.util.createElement("active", {xmlns:_3.xmpp.chat.CHAT_STATE_NS}, true));
        _a.append("</message>");
        this.session.dispatchPacket(_a.toString());
        this.onInvite(_8);
        this.setState(_3.xmpp.chat.CHAT_STATE_NS);
    }, sendMessage:function (_b) {
        if (!this.uid) {
            return;
        }
        if ((!_b.body || _b.body == "") && !_b.xhtml) {
            return;
        }
        var _c = {xmlns:"jabber:client", to:this.uid, from:this.session.jid + "/" + this.session.resource, type:"chat"};
        var _d = new _3.string.Builder(_3.xmpp.util.createElement("message", _c, false));
        var _e = _3.xmpp.util.createElement("html", {"xmlns":_3.xmpp.xmpp.XHTML_IM_NS}, false);
        var _f = _3.xmpp.util.createElement("body", {"xml:lang":this.session.lang, "xmlns":_3.xmpp.xmpp.XHTML_BODY_NS}, false) + _b.body + "</body>";
        var _10 = _3.xmpp.util.createElement("body", {}, false) + _3.xmpp.util.stripHtml(_b.body) + "</body>";
        if (_d.subject && _d.subject != "") {
            _d.append(_3.xmpp.util.createElement("subject", {}, false));
            _d.append(_d.subject);
            _d.append("</subject>");
        }
        _d.append(_10);
        _d.append(_e);
        _d.append(_f);
        _d.append("</html>");
        _d.append(_3.xmpp.util.createElement("thread", {}, false));
        _d.append(this.chatid);
        _d.append("</thread>");
        if (this.useChatStates) {
            _d.append(_3.xmpp.util.createElement("active", {xmlns:_3.xmpp.chat.CHAT_STATE_NS}, true));
        }
        _d.append("</message>");
        this.session.dispatchPacket(_d.toString());
    }, sendChatState:function (_11) {
        if (!this.useChatState || this.firstMessage) {
            return;
        }
        if (_11 == this._currentState) {
            return;
        }
        var req = {xmlns:"jabber:client", to:this.uid, from:this.session.jid + "/" + this.session.resource, type:"chat"};
        var _12 = new _3.string.Builder(_3.xmpp.util.createElement("message", req, false));
        _12.append(_3.xmpp.util.createElement(_11, {xmlns:_3.xmpp.chat.CHAT_STATE_NS}, true));
        this._currentState = _11;
        _12.append("<thread>");
        _12.append(this.chatid);
        _12.append("</thread></message>");
        this.session.dispatchPacket(_12.toString());
    }, onNewMessage:function (msg) {
    }, onInvite:function (_13) {
    }});
});
